package com.example.kotlindemo.demo

/**
 * Author 87231
 * 2022/8/16 22:11
 *
 * Unit7
 * describe：接口
 * 1.实现接口，接口中的属性
 * 2.函数重写
 **/
class Unit7 {
    /**
     * 一、接口的实现
     * 1.实现接口的格式：class 类名: 接口名 {重写方法}
     * 2.一个对象可以实现多个接口，多个接口间使用 , 隔离
     * 3，接口中已经实现的方法可以选择性的重写，未实现的方法必须重写
     */
    interface A {
        fun funA()//未实现，必须重写
        fun foo() {//已实现
            //可选择方法体
            println("A")
        }
    }

    interface A1 {
        fun foo() {
            println("A1")
        }
    }

    class A2 : A, A1 {
        override fun funA() {
            //实现方法
        }

        override fun foo() {
            super<A>.foo()
            super<A1>.foo()
        }
    }

    /**
     * 二、接口中的属性】
     *1.接口中的属性必须是抽象的，不能初始化，接口不会保留属性的值，必须重写属性
     */
    interface B {
        var name: String
        var age: Int
    }

    class B1(override var name: String, override var age: Int) : B {//方法一
    }

    class B2 : B { //方法二
        override var name: String = ""
        override var age: Int = 0
    }
    /**
     * 三、函数重写
     * 1.当实现的多个接口中有重名的函数，解决方使用super关键字解决
     */
    interface C{
        fun foo(){
            println("C")
        }
        fun test(){
            println("C")
        }
    }
    interface C1{
        fun foo(){
            println("C1")
        }
        fun test()
    }
    class C2 :C1, C {
        override fun foo() {
          super<C>.foo()
          super<C1>.foo()
        }
        override fun test() {
            super<C>.test()
        }


    }

}